草庐IT

c++ - C 和 C++ 中 WINAPI 的区别

全部标签

c++ - 为什么 C 中内置类型的初始化和赋值没有区别?

我正在看一本书,它说C中的内置类型的初始化和赋值之间没有区别。或C++,但是像string这样的类型在C++,有区别。为什么?为什么C中的内置类型没有区别?? 最佳答案 因为像int这样的标准类型没有构造函数。这些intx=123;inty;y=123;相同(开始时,y会有一些随机/垃圾值)。在创建一个对象时会调用它的构造函数。所以,例如:std::strings="123";std::stringy;y="123";s将立即创建并初始化,而y将被创建,其值将被初始化(基于std::string的构造函数),稍后,它们将在opera

c++ - 包含 .c 文件和 .h 文件有什么区别

很多时候,当我看其他人的代码时,我看到有些包含.h文件,有些包含.c/.cpp文件。有什么区别? 最佳答案 这取决于文件中的内容。#include预处理器指令只是将引用的文件插入原始文件中的那个位置。因此,实际的编译器阶段(在预处理器之后运行)看到的是所有插入的结果。头文件通常设计为通过#include使用。源文件不是,但有时是有道理的。例如,当您有一个仅包含定义和初始化程序的C文件时:constuint8_timage[]={128,128,0,0,0,0,...lotsmore...};然后通过使用#include使它对某些代码

c++ - 参数列表中char[N]和char(&)[N]的区别

以下代码无法编译:templatevoidf(char[N]){}intmain(){charbuf[10];f(buf);}如果我将char[N]更改为char(&)[N],它会起作用。那么它们之间有什么区别呢? 最佳答案 你已经被C的向后兼容性所困扰。当你声明一个像这样的函数时:intf(charc[10]);您声明了一个函数,其参数类型为char*。编译器会为您衰减参数类型。问题是:intf(charc[5]);声明相同函数。这就是C的工作方式,C++保留了它以实现兼容性。intf(char(&c)[10]);声明一个函数,其

c++ - 函数隐藏和重载的区别

我找不到函数隐藏和重载之间的任何区别。由于函数隐藏是派生类中存在的函数,隐藏了基类的函数。两者中的函数名称相同。重载:在派生类和基类中具有相同的名称但不同的签名。classA{voidprint(int);};classB:publicA{voidprint(float);};它是隐藏功能还是重载? 最佳答案 B::print函数隐藏父函数A::print。如果您想重载,您需要将A::print函数拉入B的范围:classB:publicA{public:usingA::print;//Pullin(all)A::printsymb

Hive与Hbase的区别与联系

一、概念1,Hivehive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。2,HbaseHBase是一个分布式的、面向列的开源数据库,该技术来源于FayChang所撰写的Goog

c++ - 崩溃的程序和挂起的程序之间的区别

在C++中崩溃的程序和挂起(变得无响应)的程序之间有什么区别(或原因)?当然,访问无效内存会导致程序崩溃。线程中的死锁可能会导致程序挂起。其他原因是什么?耗尽所有内存会导致程序挂起吗?还是崩溃?我对差异及其原因感到有些困惑。 最佳答案 崩溃通常是由非法指令引起的,例如访问无效内存、除以零等。通常这表现为由操作系统处理的众所周知的异常。悬挂可以分为两个相当高级别的类别:死锁,通常由2个线程竞争资源引起,每个线程都需要释放另一个线程持有的资源。一个常见的原因是在多个线程中以不一致的顺序获取多个锁,导致常见的ABBAdeadlockpat

c++ - C++中的整数提升和整数转换有什么区别

C++标准的第4.5节(整数提升)讨论了将整数类型转换为具有更高级别的类型的具体情况。C++标准的第4.7节(整数转换)以(项目符号4.7.1)开头:Anrvalueofanintegertypecanbeconvertedtoanrvalueofanotherintegertype.Anrvalueofanenumerationtypecanbeconvertedtoanrvalueofanintegertype.据我了解,4.5中描述的转换(可能除了项目符号4.5.3(枚举))可以单独使用4.7部分中的技术来执行:4.5.1和4.5.2完全包含在4.7中。1;4.5.4包含在4.7

c++ - IwGx、Iw2D 和 s3e 之间的区别

marmalade中的IwGx、Iw2D和s3eapi之间的主要区别是什么? 最佳答案 s3e提供了一组允许跨平台开发的核心API。IwGx是一个渲染器抽象层,提供对软件渲染器和OpenGL的高效访问。Iw2D是一个简单的2D绘图API,用于隐藏IwGx的一些复杂性。 关于c++-IwGx、Iw2D和s3e之间的区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10085443

c++ - 这两个语句有什么区别

这两种说法有什么区别?ob.A::ar[0]=200;ob.ar[0]=200;其中ob是类A的对象classA{public:int*ar;A(){ar=newint[100];}}; 最佳答案 没有区别。在这种情况下,ar的显式命名空间限定是多余的。在(多重、非虚拟)继承重新定义名称ar的情况下,它可能不是多余的。示例(人为设计):#includeclassA{public:int*ar;A(){ar=newint[100];}//unrelated,butpreventleaks:(RuleOfThree)~A(){delet

c++ - 指针参数和数组参数有区别吗?

void方法(double*v)void方法(doublev[5])这两者有什么区别吗?第二个是否更具体,如v中的长度被限制为5个元素? 最佳答案 当声明为参数类型时,数组会退化为指针类型。在你的例子中,voidmethod(doublev[5]);这里5根本没有任何作用,它是如此的微不足道以至于你可以完全省略它,而是写成这个:voidmethod(doublev[]);这与前面的声明完全相同。由于衰减成指针,所以上面两个完全一样:voidmethod(double*v);//becausearraydecaystopointer,